package org.ym.database.hibernate.base;

import com.google.gson.JsonObject;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.support.JpaRepositoryImplementation;
import org.springframework.data.repository.NoRepositoryBean;
import org.ym.database.hibernate.query.QueryFilter;

import java.util.List;

/**
 * @author ym
 */
@NoRepositoryBean
public interface BaseRepository<T,ID> extends JpaRepositoryImplementation<T,ID> {
    /**
     * 查询所有数据
     * @param queryFilter 查询条件
     * @param classZ 当前类
     * @return 数据
     */
    List<T> queryAll(QueryFilter queryFilter, Class<T> classZ);

    /**
     * 分页查询数据
     * @param queryFilter 查询条件
     * @param classZ 当前类
     * @return 数据
     */
    Page<T> queryPage(QueryFilter queryFilter, Class<T> classZ);

    /**
     * 查询数量
     * @param queryFilter 查询条件
     * @param classZ 类
     * @return 数量
     */
    long count(QueryFilter queryFilter,Class<T> classZ);

    /**
     * 查询所有数据,支持min、max、分组查询等
     * @param queryFilter 查询条件
     * @param classZ 表类
     * @return 数据
     */
    List<Object> query(QueryFilter queryFilter, Class<T> classZ);

    /**
     * 查询所有数据,支持min、max、分组查询等
     * @param queryFilter 查询条件
     * @param classZ 表类
     * @return 数据
     */
    List<JsonObject> queryAsJsonObject(QueryFilter queryFilter, Class<T> classZ);
}
